﻿using System.Collections.Generic;

namespace DimensionsHelper.Common.Contracts.DataCollector.Options;

/// <summary>
///     定义Collector收集数据时的表侧标识
/// </summary>
public class GroupType : INamedObject
{
    /// <summary>
    ///     此类型的有效值，即使此处定义了有效值，也需要根据实际情况读取数据，
    ///     此处配置的数值不一定会起作用。
    /// </summary>
    public IList<string> Values { get; set; } = new List<string>();

    /// <summary>
    ///     对应有效值的顺序进行内容替换，长度不限制，只有索引能和有效值匹配的才会起作用。
    /// </summary>
    public IList<string>? Replacements { get; set; }

    /// <summary>
    ///     需要对读取到的内容进行检测时，此值为对应的配置名称。
    /// </summary>
    public string Testing { get; set; } = string.Empty;

    /// <summary>
    ///     需要检测的分组名称。
    /// </summary>
    public string Grouping { get; set; } = string.Empty;

    /// <summary>
    ///     该类型是否存储数值。
    /// </summary>
    public bool NoValue { get; set; }

    /// <summary>
    ///     是否精准匹配
    /// </summary>
    public bool Exactly { get; set; }

    /// <summary>
    ///     针对Values的匹配是否忽略大小写
    /// </summary>
    public bool IgnoreCase { get; set; }

    /// <summary>
    ///     Values的值是否是正则表达式字符串
    /// </summary>
    public bool IsPattern { get; set; }

    /// <summary>
    ///     如果此值是true，在读取时，将不针对列关键字拆分子节点，此类型节点将保存数值，在读取列时，将依次刷新此类型存储的数值，
    ///     最终会保留最后一次读取的数据。
    /// </summary>
    public bool Aggregate { get; set; }

    /// <summary>
    ///     此类型是否可以是空，如果此属性是false，在读取数据时，不包含此类型的节点将被忽略。
    /// </summary>
    public bool Nullable { get; set; } = true;

    /// <summary>
    ///     表侧交叉类型名称
    /// </summary>
    public string Name { get; set; } = string.Empty;
}